If a process is catching a signal, it may request information that tells
why the system generated that signal (see _ssss_iiii_gggg_aaaa_cccc_tttt_iiii_oooo_nnnn(2)). If a process is
monitoring its children, it may receive information that tells why a
child changed state (see _wwww_aaaa_iiii_tttt_iiii_dddd(2)). In either case, the system returns
the information in a structure of type _ssss_iiii_gggg_iiii_nnnn_ffff_oooo______tttt, which includes the
following information:
int si_signo /* signal number */
int si_errno /* error number */
int si_code /* signal code */
_ssss_iiii______ssss_iiii_gggg_nnnn_oooo contains the system-generated signal number. (For the _wwww_aaaa_iiii_tttt_iiii_dddd(2)
function, _ssss_iiii______ssss_iiii_gggg_nnnn_oooo is always _SSSS_IIII_GGGG_CCCC_HHHH_LLLL_DDDD.)
If _ssss_iiii______eeee_rrrr_rrrr_nnnn_oooo is non-zero, it contains an error number associated with this
signal, as defined in _eeee_rrrr_rrrr_nnnn_oooo_...._hhhh.
_ssss_iiii______cccc_oooo_dddd_eeee contains a code identifying the cause of the signal. If the
value of _ssss_iiii______cccc_oooo_dddd_eeee is less than or equal to 0, then the signal was
generated either by a user process or on behalf of a user initiated
service. In this case _ssss_iiii______cccc_oooo_dddd_eeee defines which service initiated the
request and determines what (if any) additional information is included
in the _ssss_iiii_gggg_iiii_nnnn_ffff_oooo structure. The following are the possible user initiated
_ssss_iiii______cccc_oooo_dddd_eeee values:
_SSSS_IIII______UUUU_SSSS_EEEE_RRRR The signal was generated via _kkkk_iiii_llll_llll(2) or _ssss_iiii_gggg_ssss_eeee_nnnn_dddd(2). The
_ssss_iiii_gggg_iiii_nnnn_ffff_oooo structure contains the following additional
information:
pid_t si_pid /* sending process ID */
uid_t si_uid /* sending user ID */
_SSSS_IIII______QQQQ_UUUU_EEEE_UUUU_EEEE The signal was generated via _ssss_iiii_gggg_qqqq_uuuu_eeee_uuuu_eeee(3). The _ssss_iiii_gggg_iiii_nnnn_ffff_oooo
structure contains the following additional information:
pid_t si_pid /* sending process ID */
uid_t si_uid /* sending user ID */
union sigval si_value; /* value sent via sigqueue */
Otherwise, _ssss_iiii______cccc_oooo_dddd_eeee contains a signal-specific reason why the signal was
_SSSS_IIII_GGGG_PPPP_OOOO_LLLL_LLLL _llll_oooo_nnnn_gggg _ssss_iiii______bbbb_aaaa_nnnn_dddd band event for _PPPP_OOOO_LLLL_LLLL______IIII_NNNN, _PPPP_OOOO_LLLL_LLLL______OOOO_UUUU_TTTT, or
For _SSSS_IIII_GGGG_CCCC_HHHH_LLLL_DDDD signals, if _ssss_iiii______cccc_oooo_dddd_eeee is equal to _CCCC_LLLL_DDDD______EEEE_XXXX_IIII_TTTT_EEEE_DDDD, then _ssss_iiii______ssss_tttt_aaaa_tttt_uuuu_ssss is
equal to the exit value of the process; otherwise, it is equal to the
signal that caused the process to change state. For some
implementations, the exact value of _ssss_iiii______aaaa_dddd_dddd_rrrr may not be available; in that
case, _ssss_iiii______aaaa_dddd_dddd_rrrr is guaranteed to be on the same page as the faulting